package zsc.nine.onlinemall.mapper;

import org.apache.ibatis.annotations.*;
import zsc.nine.onlinemall.entity.User;

import java.util.List;

/**
 * @author : 莫远烙
 * @version 1.0
 */
@Mapper
public interface UserMapper {

    //添加用户

    /**
     *
     * @param user 用户类
     * @return true:成功，false:失败
     */
    @Insert("insert into " +
            "t_user(userEmail,userName,password,isAdmin,userAddress,createDate) "
            + "values(#{userEmail},#{userName},#{password},#{isAdmin},#{userAddress},#{createDate})")
    boolean insertUser(User user);


    //@Delete("delete from t_user where userEmail=#{userEmail}")
    //public int deleteUser(String userEmail);

    /**
     *
     * @param userEmail 用户邮箱
     * @return true:成功，false:失败
     */
    // 根据邮箱删除用户
    @Delete("delete from t_user where userEmail=#{userEmail}")
    boolean deleteUser(String userEmail);

    /**
     *
     * @param userEmail 用户邮箱
     * @param userName 用户名
     * @return true:成功，false:失败
     */
    //根据邮箱更新用户名
    @Update("update t_user set userName=#{userName} where userEmail=#{userEmail}")
    boolean updateUserName(String userEmail, String userName);

    /**
     *
     * @param userEmail  用户邮箱
     * @param password 待更新密码
     * @return true:成功，false:失败
     */
    //根据邮箱更新密码
    @Update("update t_user set password=#{password} where userEmail=#{userEmail}")
    boolean updatePassword(String userEmail, String password);


    /**
     *
     * @param oldEmail 旧邮箱
     * @param newEmail 新邮箱
     * @return true:成功，false:失败
     */
    //根据邮箱更新邮箱
    @Update("update t_user set userEmail=#{newEmail} where userEmail=#{oldEmail}")
    boolean updateUserEmail(String oldEmail, String newEmail);

    /**
     *
     * @param userEmail 用户邮箱
     * @param userAddress 待更新的用户地址
     * @return true:成功，false:失败
     */
    //根据邮箱更新地址
    @Update("update t_user set userAddress=#{userAddress} where userEmail=#{userEmail}")
    boolean updateUserAddress(String userEmail, String userAddress);

    //展示所有用户
    @Select("select * from t_user ")
    List<User> show();

    /**
     *
     * @param userEmail 邮箱
     * @return 用户
     */
    // 根据邮箱查找用户
    @Select("select * from t_user where userEmail=#{userEmail}")
    User findByEmail(String userEmail);

    /**
     *
     * @param likeName 用户名字的片段
     * @return 用户名列表
     */
    //模糊查询之名字
    //看一看有多少人的名字跟你一样
    @Select("select * from t_user where userName like '%' #{likeName} '%'")
    List<User> findByLikeName(String likeName);

    /**
     *
     * @param likeAddress 地址片段
     * @return 地址列表
     */
    //模糊查询之地址
    @Select("select userAddress from t_user where userAddress like '%' #{likeAddress} '%'")
    List<String> findByLikeAddress(String likeAddress);

    /**
     * @param key:排序索引可选字段：User类的属性
     * @param index                 分页起始位置
     * @param pageSize              分页大小
     * @return Order 列表降序
     */
    //分页查询
    @Select("select * from t_user order by #{key} desc limit #{index},#{pageSize} ")
    List<User> pagedFind(String key, int index, int pageSize);

    /**
     * @param index    分页起始位置
     * @param pageSize 分页大小
     * @return Order 列表升序
     */
    //分页查询
    @Select("select * from t_user order by userId asc limit #{index},#{pageSize} ")
    List<User> pagedFindById(int index, int pageSize);

    /**
     * @return 共有多少行数
     * @author Zainus
     */
    @Select("select count(userId) from t_user")
    String getLength();

}
